package com.ldn.server.mqtt.handler;

import com.ldn.common.basic.utils.system.StrUtils;
import lombok.extern.slf4j.Slf4j;
import org.dromara.mica.mqtt.core.server.auth.IMqttServerUniqueIdService;
import org.springframework.context.annotation.Configuration;
import org.tio.core.ChannelContext;

/**
 * 自定义 clientId，唯一id服务
 *
 * @author 李大牛家的牛 (scafel@163.com)
 * @product serverless
 * @className UniqueIdServiceHandler
 * @createDate 2025/2/8 - 16:41
 * @description 唯一id服务
 **/
@Slf4j
@Configuration(proxyBeanMethods = false)
public class UniqueIdServiceHandler implements IMqttServerUniqueIdService {
    /**
     * 获取唯一id
     *
     * <p>
     *     实现原理
     *     <br> 1. userName + password 生成唯一id 需要与数据库中的唯一值对应  如果数据库查询不到则返回 null 客户端报错
     *     <br> 2. 唯一id编码
     * </p>
     *
     *
     *
     * @param context  ChannelContext 链接对象
     * @param clientId clientId 请求时的clientId
     * @param userName userName 请求时的userName
     * @param password password 请求时的password
     * @return
     */
    @Override
    public String getUniqueId(ChannelContext context, String clientId, String userName, String password) {
        log.info("getUniqueId: clientId={}, userName={}, password={}", clientId, userName, password);
        if (StrUtils.isBlank(userName) || StrUtils.isBlank(clientId) || StrUtils.isBlank(password)) {
            return null;
        }
        return userName;
    }
}
